﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using accesoDatos;
using clasesBase;
using Logica;

namespace PlanificacionProduccion
{
    public partial class FrmPlanillasBusq : Form
    {
        ManejadorAyudas ayuda = new ManejadorAyudas();
        int idPlanificacion = 0;
        PlanificacionProd objPlanificacion;
        ItemPlanificacionProduccion itemElegido = null;

        public int IdPlanificacion
        {
            set { this.idPlanificacion = value; }
        }

        public FrmPlanillasBusq()
        {
            InitializeComponent();
        }

        private void form_Load(object sender, System.EventArgs e)
        {
            this.objPlanificacion = new PlanificacionProd(idPlanificacion);
            if (idPlanificacion != 0) mostrarDatos();
        }

        private void mostrarDatos()
        {
            lblTitulo.Text = objPlanificacion.Nombre.Trim();
            txtFecha.Text = objPlanificacion.Fecha.ToString();
            txtNumero.Text = objPlanificacion.Numero.ToString();

            mostrarItemsPlanificacion();
        }

        private void mostrarItemsPlanificacion()
        {
            grillaItems.Rows.Clear();
            int fila = 0;
            foreach (ItemPlanificacionProduccion item in objPlanificacion.Items)
            {
                grillaItems.Rows.Add(item.ID, item.ObjProducto.ID, item.ObjProducto.Nombre, item.CantidadCajas);
                if (item.PrioridadAlta) grillaItems.Rows[fila].DefaultCellStyle.BackColor = Color.YellowGreen;
                fila++;
            }
        }

        private void mostrarPlanillas(List<PlanillaProduccion> planillas)
        {
            decimal totalEstuches = 0;
            grillaPlantillas.Rows.Clear();
            foreach (PlanillaProduccion planilla in planillas)
            {
                grillaPlantillas.Rows.Add(planilla.ID, planilla.Fecha, planilla.NumeroLote, planilla.Responsable, planilla.CantEstuchesObtenidos);
                totalEstuches += planilla.CantEstuchesObtenidos;
            }

            lblEstuches.Text = "Cant. Estuches: " + ((int)totalEstuches).ToString();
            lblEstuchesPorCaja.Text = string.Format("CAJAS aprox: {0}", Math.Round((totalEstuches / itemElegido.ObjProducto.EstuchesPorCaja), 2));
            obtenerPorcentajeCompletado();

        }

        private void btnAgregarPlanilla_Click(object sender, EventArgs e)
        {
            if (this.itemElegido != null)
            {
                if (itemElegido.ObjProducto.obtenerFormulaActual().ID != 0)
                {
                    FrmPlanillasDet form = FormsUnicos.ObtenerInstancia<FrmPlanillasDet>(this);
                    form.IdItemPlanificacion = itemElegido.ID;
                    form.ObjProducto = itemElegido.ObjProducto;
                    form.ShowDialog();

                    itemElegido.cargarColecciones();
                }
                else Notificador.formulaActualNoExistente();
            }

            grillaItems_Seleccion(null, null);
        }

        private void obtenerPorcentajeCompletado()
        {
            string porcentaje = "";
            int cantidadEstuchesObtenidos = ItemPlanificacionProduccion.cantEstuchesTotales(itemElegido.ID);
            if (cantidadEstuchesObtenidos != 0)
            {
                decimal cantEstuchesEstimada = (decimal)(itemElegido.CantidadCajas * itemElegido.ObjProducto.EstuchesPorCaja);
                porcentaje = (Math.Round((cantidadEstuchesObtenidos * 100 / cantEstuchesEstimada), 2)).ToString() + "%";
            }
            else porcentaje = "0%";

            lblPorcCompletado.Text = porcentaje;
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void grillaItems_Seleccion(object sender, EventArgs e)
        {
            btnAgregarPlanilla.Enabled = false;
            if (grillaItems.Rows.Count > 0)
            {
                txtIdItemSeleccionado.Text = "";
                int idItem = Convert.ToInt32(grillaItems.CurrentRow.Cells["colIdItem"].Value);
                itemElegido = this.objPlanificacion.Items.Find(elem => elem.ID == idItem);
                if (itemElegido != null)
                {
                    mostrarPlanillas(itemElegido.Planillas);
                    btnAgregarPlanilla.Enabled = true;
                }
            }
            else itemElegido = null;
        }

        private void grillaPlantillas_DoubleClick(object sender, EventArgs e)
        {
            if (this.itemElegido != null)
            {
                if (grillaPlantillas.Rows.Count > 0)
                {
                    int idPlanilla = Convert.ToInt32(grillaPlantillas.CurrentRow.Cells["colIdPlanilla"].Value);

                    FrmPlanillasDet form = FormsUnicos.ObtenerInstancia<FrmPlanillasDet>(this);
                    form.IdElemento = idPlanilla;
                    form.SoloVisualizacion = true;
                    form.Show();
                }
            }
        }

        private void btnFormulaActual_Click(object sender, EventArgs e)
        {
            DataGridViewRow filaSeleccionada = grillaItems.CurrentRow;
            if (filaSeleccionada != null)
            {
                int idProd = Convert.ToInt32(filaSeleccionada.Cells["colIdProducto"].Value);
                if (idProd != 0)
                {
                    int idFormActual = Producto.obtenerIdFormulaActual(idProd);
                    if (idFormActual != 0)
                    {
                        FrmFormulasDet form = FormsUnicos.ObtenerInstancia<FrmFormulasDet>(this.MdiParent);
                        form.SoloVisualizacion = true;
                        form.IdElemento = idFormActual;
                        form.ShowDialog();
                    }
                    else Notificador.formulaActualNoExistente();
                }
            }
            else Notificador.elementoNoSeleccionado();
        }
    }
}
